import os
import shutil
from boot import logger


__all__ = ["file_exist", "copy_file", "copy_file_rename", "clear_directory"]


def file_exist(file_path) -> bool:
    """
    文件是否存在
    :param file_path:
    :return:
    """
    return os.path.exists(file_path)


def copy_file(src_path, dst_dir):
    """
    将文件从源路径复制到目标目录
    :param src_path: 源文件路径（需包含文件名）
    :param dst_dir: 目标目录路径
    """
    try:
        # 确保目标目录存在
        os.makedirs(dst_dir, exist_ok=True)
        # 执行复制操作（保留元数据）
        shutil.copy2(src_path, dst_dir)
        logger.info(f"文件已复制到: {os.path.join(dst_dir, os.path.basename(src_path))}")
    except Exception as e:
        logger.info(f"复制失败: {e}")


def copy_file_rename(src_path, dst_dir, dst_filename=None):
    """
    将文件从源路径复制到目标目录，并可选择修改目标文件的文件名。

    :param src_path: 源文件路径（需包含文件名）
    :param dst_dir: 目标目录路径
    :param dst_filename: 目标文件名（可选）。如果不指定，则使用源文件名。
    """

    # 确保目标目录存在
    os.makedirs(dst_dir, exist_ok=True)

    # 如果未指定目标文件名，则使用源文件名
    if dst_filename is None:
        dst_filename = os.path.basename(src_path)

    # 构造目标文件的完整路径
    dst_path = os.path.join(dst_dir, dst_filename)

    # 执行复制操作（保留元数据）
    shutil.copy2(src_path, dst_path)


def clear_directory(directory_path):
    """
    清空指定目录的所有文件和子目录。

    :param directory_path: 要清空的目录路径
    """
    # 遍历目录中的所有文件和子目录
    for item in os.listdir(directory_path):
        item_path = os.path.join(directory_path, item)
        # 如果是文件，删除文件
        if os.path.isfile(item_path):
            os.remove(item_path)
        # 如果是目录，递归删除目录
        elif os.path.isdir(item_path):
            shutil.rmtree(item_path)

